www.gusucode.com > matlab神经网络原理与实例精解 本书源文件 > 第9章 反馈神经网络/hopfield_hand.m

    % hopfield_hand.m
%% 清理
close all
clear,clc

%% 
disp('吸引子坐标为:');
c1=[-1,1]						% 第一个平衡点
c2=[1,-1]						% 第二个平衡点

% 计算权值矩阵
w=zeros(2,2);
for i=1:2
   for j=1:2
      if (i~=j)
         w(i,j)=1/2*(c1(i)*c1(j) + c2(i)*c2(j)); 
      end
   end
end

% 阈值向量
b=[0,0];

disp('权值矩阵为');
w
disp('阈值向量为');
b

% 网络初始值
rng(0);
y=rand(1,2)*2-1;
y(y>0)=1;
y(y<=0)=-1;

% 循环迭代
disp('开始迭代');
while 1
    % 保存上一次的网络状态值
    disp('网络状态值:');
    tmp = y
    
    % 更新第一个神经元
    y_new1 = y * w(:,1) + b(1);
    fprintf('第一个神经元由 %d 更新为 %d \n', y(1), y_new1);
    y=[y_new1, y(2)];
    
    % 更新第二个神经元
    y_new2 = y * w(:,2) + b(2);
    fprintf('第二个神经元由 %d 更新为 %d \n', y(2), y_new2);
    y=[y(1), y_new2];
    
    % 如果状态值不变,则结束迭代
    if (tmp == y)
        break;
    end
    
end